#include <iostream>
#include <vector>
using namespace std;

inline int add(const int a, const int b) {
    return a + b;
}
inline int sub(const int a, const int b) {
    return a - b;
}
inline int multi(const int a, const int b) {
    return a * b;
}
inline int divide(const int a, const int b) {
    return a / b;
}
// typedef decltype(add) AddFn;
// typedef AddFn* AddFnPtr;
// 等价上面两句
typedef decltype(add)* AddFnPtr;
// 不使用 decltype
// typedef int (*AddFnPtr)(const int, const int);

void test() {
    vector<AddFnPtr> fns{ add, sub, multi, divide };

    cout << fns[0](1, 2) << endl;
    cout << fns[1](1, 2) << endl;
    cout << fns[2](1, 2) << endl;
    cout << fns[3](1, 2) << endl;
}
int main() {
    test();
    return 0;
}